資料到手後,首先觀察資料的組成特性,除了先前提過的shape()、len()、describe(),來看看還有其他統計方法可以更了解資料特性。
匯入表格
import pandas as pd
data = [[8,7,6,5,4], [3,4,2,9,5], [4,6,7,2,8], [6,None,4,None,3], [2,7,6,3,9]]
df1=pd.DataFrame(data, index=['小明','小美','小英','小玉','小翔'], columns=['蘋果','芭樂','香蕉','橘子','檸檬'])
print(df1)
執行結果:
蘋果 芭樂 香蕉 橘子 檸檬
小明 8 7.0 6 5.0 4
小美 3 4.0 2 9.0 5
小英 4 6.0 7 2.0 8
小玉 6 NaN 4 NaN 3
小翔 2 7.0 6 3.0 9
shape()回傳一個具有(列, 行)數量的tuple。
df1.shape
執行結果:
(5, 5)
DataFrame中資料總數(行列的乘積)。
df1.size
執行結果:
25
回傳軸數(若為series會回傳1,若為DataFrame則會回傳2)。
df1.ndim
執行結果:
2
len()->回傳列數
len(df1)
執行結果:
5
count()->DataFrame每一個欄位中,非缺失值的數量,並輸出一個以欄位名稱為索引的series。
df1.count()
執行結果:
蘋果 5
芭樂 4
香蕉 5
橘子 4
檸檬 5
dtype: int64
同樣的 min()、max()、mean()、median()、std()等統計方法,都會回傳一個以欄位名稱為索引的series。
最小值
df1.min()
執行結果:
蘋果 2.0
芭樂 4.0
香蕉 2.0
橘子 2.0
檸檬 3.0
dtype: float64
最大值
df1.max()
執行結果:
蘋果 8.0
芭樂 7.0
香蕉 7.0
橘子 9.0
檸檬 9.0
dtype: float64
平均數
df1.mean()
執行結果:
蘋果 4.60
芭樂 6.00
香蕉 5.00
橘子 4.75
檸檬 5.80
dtype: float64
標準差
df1.std()
執行結果:
蘋果 2.408319
芭樂 1.414214
香蕉 2.000000
橘子 3.095696
檸檬 2.588436
dtype: float64
describe()會回傳一個以統資料名稱作為索引的DataFrame,其預設為會忽略缺失值去做計算。
若使用T轉置來重排結果,可以在畫面將欄位名稱變索引,資料更清楚顯示。
df1.describe().T
執行結果:
count mean std min 25% 50% 75% max
蘋果 5.0 4.60 2.408319 2.0 3.00 4.0 6.0 8.0
芭樂 4.0 6.00 1.414214 4.0 5.50 6.5 7.0 7.0
香蕉 5.0 5.00 2.000000 2.0 4.00 6.0 6.0 7.0
橘子 4.0 4.75 3.095696 2.0 2.75 4.0 6.0 9.0
檸檬 5.0 5.80 2.588436 3.0 4.00 5.0 8.0 9.0
若想知道describe()中四分位數外的其他分位數,可透過percentiles參數指定其他分位數,需指定介於0-1之間數值,以串列方式傳入。
找出每一欄位中前1%數值
df1.describe(percentiles=[.99]).T
執行結果:
count mean std min 50% 99% max
蘋果 5.0 4.60 2.408319 2.0 4.0 7.92 8.0
芭樂 4.0 6.00 1.414214 4.0 6.5 7.00 7.0
香蕉 5.0 5.00 2.000000 2.0 6.0 6.96 7.0
橘子 4.0 4.75 3.095696 2.0 4.0 8.88 9.0
檸檬 5.0 5.80 2.588436 3.0 5.0 8.96 9.0
統計資料計算,皆為預設為會忽略缺失值去做計算。可將函式的參數skipna參數改為False,
則describe()計算統計資料將不會忽略缺失值,則沒有缺失值欄位才能回傳確切數字,若有缺失值則回傳NaN。
以max()為列
df1.max(skipna=False)
執行結果:
蘋果 8.0
芭樂 NaN
香蕉 7.0
橘子 NaN
檸檬 9.0
dtype: float64
今天先到這,連假愉快,月餅不要吃太多喔~